<?php
/**
 * Contains the MySQL-Functions
 *
 * 
 * @param none
 * @author Dennis Franke <dennis@franke-s.de>
 * @package LD-CMS2
 */
Class DB {
	private static $db = NULL;
	
	private $sqlServer = "";
	private $sqlDatabase = "";
	private $sqlUser = "";
	private $sqlPw = "";
	
	public $handler = null;
	
	public static function getInstance() {
		if(self::$db === null) self::$db = new DB;
		return self::$db;	
	}
	
	private function __construct() {}
	private function __clone() {}
	
	
  	/**
   	* Konstruktor
   	*
   	* @param string $sql_server Serverhost.
   	* @param string $sql_database Datenbank.
   	* @param string $sql_user Datenbank User.
   	* @param string $sql_password Datenbank Passwort.
   	*/
	public function initDatabase($server,$database,$user,$pw) {
		$this->sqlServer = $server;
		$this->sqlDatabase = $database;
		$this->sqlUser = $user;
		$this->sqlPw = $pw;
		
		$this->connect();
	}
  
	/**
	* Variablen parsen.
	* 
	* mysql_real_escape_string ( string $unescaped_string)
	* 
	   * Maskiert spezielle Zeichen im unescaped_string unter Ber�cksichtigung des aktuellen Zeichensatzes der Verbindung
	   * , so dass das Ergebnis ohne Probleme in query() verwendet werden kann.
	   * Wenn Du Bin�rdaten einf�gen willst, musst du die Funktion auf jeden Fall verwenden. 
	   * mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf, 
	   * die folgende Zeichen mit einem Backslash ('\') versieht: \x00, \n, \r, \, ', " und \x1a. 
	   * 
	   * Die Funktion muss immer (mit wenigen Ausnahmen) verwendet werden, um Daten abzusichern, 
	   * bevor sie per Query an MySQL �bermittelt werden.
	   *
	   * @param string $value zu parsende Variable.
	   * @return string $value Variable mit geparsten inhalt.
	   */
	  public function parseVar($value) {
		// Quote if not a number or a numeric string
		if (!is_numeric($value)) {
			$value =  mysql_real_escape_string($value);
		}
		return $value;
	  }
	
  	/**
  	 * Mit Datenbank Verbinden.
   	*
   	*/
  	public function connect() {
    	$this->handler = mysql_connect($this->sqlServer,$this->sqlUser,$this->sqlPw) or die (mysql_error());
    	
    	mysql_select_db($this->sqlDatabase,$this->handler) or die ("Datenbank existiert nicht. Ueberpruefen sie den Datenbanknamen.");
  	}

  	/**
   	* Abfrage ausf�hren.
   	*
   	* @param string $query Abfrage.
   	* @return mixxed $return Ergebnis der Abfrage.
   	*/
  	public function query($query,$reportError = true) {
		if($reportError == true)  {
        	$ret =  mysql_query($query,$this->handler) or $this->mysqlError();
    	}else{
        	$ret = mysql_query($query,$this->handler) or die(mysql_error());
    	}
    	return $ret;
   	}
   
   
   	/**
    * Gibt die MySQL-Fehler aus und speichert sie in der Datenbank
    *
    */
   
   	public function mysqlError() {
   		$fehler = mysql_error($this->handler);
 		$fehlernr = mysql_errno($this->handler);
 	
 		echo "<b>Mysql-Error:</b> ".$fehlernr;
 		echo '<br /><b>Error-Number:</b> '.$fehler;
 	
 		// In der Datenbank speichern
 		$this->query("INSERT INTO ".Tables::$errorTbl." SET errorName = 'MySQL-Error', errorText = 'Error-Number:".$fehlernr."<br />Error: ".$this->parseVar($fehler)."',errorDate='".time()."',errorArt='MySQL'",false);
 	
 	  	exit;
   	}

  /**
   * Datens�tze als Array zur�ckgeben.
   * 
   * mysql_fetch_array ($result)
   * 
   * Liefert ein Array das dem aktuellen Datensatz entspricht oder FALSE, wenn keine weiteren Datens�tze vorliegen.
   *
   * @param mixxed $result
   * @return array $result Alle Datens�tze einer Abfrage. mit $result['name'] zum beispiel wird der name ausgegeben.
   */
  	public function fetchArray($result) {
    	return mysql_fetch_array($result);
   	}

  	/**
   	* fetchRow($result) � Liefert einen Datensatz als indiziertes Array.
   	*
   	* @param string $result
   	* @return array
   	*/
  	public function fetchRow($result) {
    	return mysql_fetch_row($result);
   	}

  	/**
   	* fetchAssoc($result) � Liefert einen Datensatz als assoziatives Array.
   	*
   	* @param string $result
   	* @return array
   	*/
  	public function fetchAssoc($result) {
   		return mysql_fetch_assoc($result);
   	}
   
  	/**
   	* listDBs($result) � Auflistung der verf�gbaren Datenbanken auf einem MySQL Server. 
   	*
   	* @param string $result
   	* @return mixxed
   	*/
  	public function listDBs($result) {
   		return mysql_list_dbs($result);
   	}
  
  	/**
   	* fetchObject($result) � Liefert eine Ergebniszeile als Objekt.
   	*
   	* @param string $result
   	* @return obj
   	*/
  	public function fetchObject($result) {
   		return mysql_fetch_object($result);
   	}

  	/**
   	* result($result) � Liefert Ergebnis.
   	*
   	* @param string $result
   	* @return string
   	*/
  	public function result($result) {
   		return mysql_result($result);
   	}
  

  	/**
   	* numRows($result) � Liefert die Anzahl der Datens�tze im Ergebnis.
   	*
   	* @param string $result
   	* @return string
   	*/
  	public function numRows($result) {
    	return @mysql_num_rows($result);
   	}

  	/**
   	* numFields($result) � Liefert die Anzahl der Felder in einem Ergebnis.
   	*
   	* @param string $result
   	* @return string
   	*/
  	public function numFields($result) {
    	return @mysql_num_fields($result);
   	}

  	/**
   	* insertId() � Liefert die ID einer vorherigen INSERT-Operation.
   	*
   	* @return int
   	*/
  	public function insertId() {
    	return @mysql_insert_id($this->handler);
   	}

  	/**
   	* Schliesst Datenbank Verbindung.
   	*
   	*/
  	public function close() {
    	mysql_close($this->handler);
   	}
}
?>